<?php
/**
 * 熵巡 - 企业级氚云OpenAPI数据管理平台
 * 开发归属 Alyr.net
 * 氚云图片代理服务 - 跨域代理、缓存管理
 * 尊重劳动成果是一种美德
 */

// 启用输出缓冲和Gzip压缩
if (!ob_start('ob_gzhandler')) {
    ob_start();
}

require_once 'h3yun_image.php';

// 日志函数已禁用
// function writeImageLog($message, $level = 'INFO') {}

// 获取配置
$config = require '../config.php';

// 获取图片ID参数
$imageId = $_GET['id'] ?? '';
// 获取缩略图宽度参数
$width = isset($_GET['width']) ? (int)$_GET['width'] : 0;

if (empty($imageId)) {
    // writeImageLog("错误: 缺少图片ID参数", 'WARNING');
    http_response_code(400);
    echo '缺少图片ID参数';
    exit;
}

// writeImageLog("图片访问: {$imageId}");

try {
    // 创建氚云图片处理器
    $imageHandler = getH3yunImageHandler($config);
    
    // 下载附件/图片
    $result = $imageHandler->downloadAttachment($imageId);
    
    if ($result['success']) {
        $imageData = $result['data'];
        $contentType = $result['content_type'] ?? 'image/jpeg';
        
        // 如果需要压缩且是图片类型
        if ($width > 0 && strpos($contentType, 'image/') === 0) {
            // 从二进制数据创建图片资源
            $image = @imagecreatefromstring($imageData);
            
            if ($image !== false) {
                $originalWidth = imagesx($image);
                $originalHeight = imagesy($image);
                
                // 只在目标宽度小于原图时才压缩
                if ($width < $originalWidth) {
                    $ratio = $width / $originalWidth;
                    $newHeight = (int)($originalHeight * $ratio);
                    
                    // 创建缩略图
                    $thumb = imagecreatetruecolor($width, $newHeight);
                    
                    // 保持透明度（PNG/GIF）
                    if ($contentType === 'image/png' || $contentType === 'image/gif') {
                        imagealphablending($thumb, false);
                        imagesavealpha($thumb, true);
                        $transparent = imagecolorallocatealpha($thumb, 255, 255, 255, 127);
                        imagefilledrectangle($thumb, 0, 0, $width, $newHeight, $transparent);
                    }
                    
                    // 高质量重采样
                    imagecopyresampled($thumb, $image, 0, 0, 0, 0, $width, $newHeight, $originalWidth, $originalHeight);
                    
                    // 设置响应头
                    header('Content-Type: ' . $contentType);
                    header('Cache-Control: public, max-age=2592000'); // 30天缓存
                    header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 2592000) . ' GMT');
                    
                    // 根据类型输出
                    ob_start();
                    switch ($contentType) {
                        case 'image/png':
                            imagepng($thumb, null, 8); // PNG压缩级别0-9
                            break;
                        case 'image/gif':
                            imagegif($thumb);
                            break;
                        case 'image/webp':
                            imagewebp($thumb, null, 85);
                            break;
                        default:
                            imagejpeg($thumb, null, 85); // JPEG质量85%
                    }
                    $compressedData = ob_get_clean();
                    
                    imagedestroy($thumb);
                    imagedestroy($image);
                    
                    echo $compressedData;
                    exit;
                }
                
                imagedestroy($image);
            }
        }
        
        // 输出原图
        header('Content-Type: ' . $contentType);
        header('Cache-Control: public, max-age=2592000'); // 30天缓存
        header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 2592000) . ' GMT');
        
        echo $imageData;
    } else {
        // writeImageLog("图片不存在: {$imageId} - " . $result['message'], 'WARNING');
        // 返回默认错误图片或404
        http_response_code(404);
        header('Content-Type: text/plain');
        echo '图片不存在: ' . $result['message'];
    }
    
} catch (Exception $e) {
    $errorMsg = $e->getMessage();
    // writeImageLog("服务器错误: {$imageId} - {$errorMsg}", 'ERROR');
    http_response_code(500);
    header('Content-Type: text/plain');
    echo '服务器错误: ' . $errorMsg;
}
?>